package jm.nj.demo06main.demo07;

/*
 * 正则表达式:符合某种规则的字符串
 * 作用:正则表达式通常被用来检索、替换那些符合某个规则的文本。
 * 常用的正则表达式:
 * []:表示范围
 *      [abc]含义:代表的是 字符串a/b/c
 *      [a-zA-Z]含义:代表的是a到z 或 A到Z，两头的字母,包括在内其中的一个字母
 *      [0-9]:0-9
 * {}:表示数量
 *      X{n}:代表的是X恰好出现n次   a{5}a正好出现5次
 *      X{n,}:至少出现n次
 *      X{n,m} 至少n次,不超过m次
 *
 * 数量词   X?    出现一次或一次也没有
 * 数量词  X*    代表出现0次或多次
 * 数量词 X+    X出现一次或多次
 *
 * */
public class Demo01Regex {
    public static void main(String[] args) {
        //replaceAll();
        //split03();
        //split02();
        //split01();
        //checkPhone();
        checkQQ();
    }
/*
* 举例：校验qq号码.
	1:要求必须是5-15位数字
	2:0不能开头

	正则:
		"[1-9][0-9]{4,14}"
* */
    private static void checkQQ() {
        String qq = "123456789";
        qq = "012345678";
        String regex = "[1-9][0-9]{4,14}";//不包括14
        boolean b= qq.matches(regex);
        System.out.println(b);
    }

    /*
    * 举例：校验手机号码
        1：要求为11位数字
        2：第1位为1，第2位为3、4、5、7、8中的一个，后面9位为0到9之间的任意数字。

        正则:
            "1[34578][0-9]{9}"
    * */
    private static void checkPhone() {
        String phone = "13800138000";
        phone = "13800138000";
        phone = "1380013a000";
        String regex = "1[34578][0-9]{9}";
        boolean b =phone.matches(regex);
        System.out.println(b);
    }

    /*
     *  字符串:"11-22-33-44"
     *
     * */
    private static void split01() {
        String[] arr01 = "11-22-33-44".split("-");
        for (int i = 0; i < arr01.length; i++) {
            System.out.println(arr01[i]);
        }
    }

    /* 字符串:"11 22 33 44"
     * 字符串:"11         22    33    44"
     * */
    private static void split02() {
        String[] arr01 = "11 22 33 44".split(" ");
        for (int i = 0; i < arr01.length; i++) {
            System.out.println(arr01[i]);
        }
        System.out.println("---------");
        String[] arr02 = "11        22    33  44".split(" +");
        for (int i = 0; i < arr02.length; i++) {
            System.out.println(arr02[i]);
        }
    }

    /*
     * 字符串:"11.22.33.44"
     * .含义：代表的是任何字符,不能直接切割
     * \转义字符
     * t没有特殊含义,可以使用转义字符\t-->制表符(Tab)
     * .有特殊含义的字符,使用转义字符\.-->普通的.
     * '有特殊含义的字符,使用转义字符\'-->普通的'
     * 在正则中两个\\代表一个\
     * */
    private static void split03() {
        char c = '\'';
        String[] arr = "11.22.33.44".split("\\.");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    /*
     * an指定要求替换字符串中的字符
     * */
    private static void replaceAll() {
        String s = "faehsfjgh1htsfhgfhgf5g4hhfhfghfg165h5f41hfhhfhfh";
        String ss = s.replaceAll("[0-9]", "@_@");
        System.out.println(ss);

        s = "faehsfjgh1htsfhgfhgf5g4hhfhfghfg165h5f41hfhhfhfh";
        ss = s.replaceAll("[0-9]+", "@_@");
        System.out.println(ss);

    }

    /*
     * 字符串:"11.22.33.44"
     * .含义：代表的是任何字符,不能直接切割
     * \转义字符
     * t没有特殊含义,可以使用转义字符\t-->制表符(Tab)
     * .有特殊含义的字符,使用转义字符\.-->普通的.
     * '有特殊含义的字符,使用转义字符\'-->普通的'
     * 在正则中两个\\代表一个\
     * */


}
